package demo1230.pm;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

/*
Socket类:代表客户端类
1.public Socket(InetAddress address, int port)throws IOException
创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
2.public Socket(String host,int port) throws UnknownHostException, IOException
创建一个流套接字并连接到指定的ip地址和端口号.

成员方法:
1.InputStream getInputStream()
该方法返回一个InputStream类型的输入流对象，如果该对象是由服务器端的Socket返回，
就用于读取客户端发送的数据，反之，用于读取服务器端发送的数据

2.OutputStream getOutputStream()
该方法返回一个OutputStream类型的输出流对象，如果该对象是由服务器端的Socket返回，
就用于向客户端发送数据，反之，用于向服务器端发送数据

3.void close()
该方法用于关闭Socket连接，结束本次通信。
在关闭socket之前，应将与socket相关的所有的输入/输出流全部关闭，
这是因为一个良好的程序应该在执行完毕时释放所有的资源

创建客户端步骤:
1.创建一个Socket对象s,绑定访问的服务器端的ip和端口号
2.使用客户端对象s中的getOutputStream,获取一个网络字节输出流对象.
3.使用网络字节输出流对象写出一个数据到服务器端.
4.使用客户端对象s中的getInputStream,获取一个网络字节输入流对象.
5.使用网络字节输入流对象读取服务器端发送的数据.
6.关闭客户端对象.

注意:必须先启动服务器端,再启动客户端.
 */
public class Demo_02 {
    public static void main(String[] args) {
//1.创建一个Socket对象s,绑定访问的服务器端的ip和端口号
        try (Socket socket = new Socket("127.0.0.1", 8888)) {
//     2.使用客户端对象s中的getOutputStream,获取一个网络字节输出流对象.
            OutputStream os = socket.getOutputStream();
//            3.使用网络字节输出流对象写出一个数据到服务器端.
            os.write("大傻春,你要干什么".getBytes());
//        获取网络字节输入流对象
            InputStream is = socket.getInputStream();
//            读取服务器端发送的数据
            byte [] bs = new byte[1024];
            int read = is.read(bs);
            System.out.println(new String(bs,0,read));

        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
